Rendering/ Outline Rendering

Outline Rendering

The next tutorial shows how to use outline rendering techniques of Realsoft 3D.

Tutorial level: Advanced

Example project: tutorprojects/rendering/outlines

1. First we model a simple test scene: a flat analytic cube (table), a sphere and a freeform object modeled using the SDS tools (a fork). You may also load the test scene: 'tutorprojects/rendering/outlineobjects'.


A test scene for outline rendering

2. Go to the Render settings tab of the Select window and drag&drop 'Black&white outline rendering' into the view window. Render the view - the result is a two-colored image.


Basic outline rendering

3. Let's remove the dense network of mesh boundaries from the fork object. Go to the materials tab of the select window and create a new, empty VSL material. Open the property window and rename the material as 'nopatches'. Check 'Advanced' option to see the VSL hierarchy. Also you may need to click on the '+' sign to access the VSL Objects. Drag & drop a 'Shader' object into the root level of the material. Then drag & drop a 'Constant' object into the 'Surface properties' shader. Set 'Output' channel to 'Surface:Identifier' using the popup menu of the VSL hierarchy tree. Change the assigned constant value to any nonzero value, for example 1.0. Identifier value 0 would blend the object with the background (empty space has identifier zero). If you later need to process several objects this way, just create several materials and assign value 1 in the first one, value 2 in the second one etc.


A material that hides surface patches in outline rendering

4. Make sure that the fork is selected and drag&drop the 'Nopatches' material to the view window.

5. While we are in the material editor, let's create another material which texture maps some outlines. So, create a new VSL material called 'textureoutlines'. Check the 'Advanced' option. Then apply the 'Texture map' wizard.  Select the 'Texture' object from the VSL hierarchy and change the 'Output' channel again to 'Surface:Identifier'. Then pick a suitable texture file, such as 'tutorprojects/rendering/textures/realsoft.gif'. Set the 'Flip X' option. Close the property window. Then select the sphere from the view window and drag&drop the new material into the view.

Note: Black texture areas will again blend with the background, and texture areas where the first subchannel (=red) value is 1.0 will blend with the fork material (its identifier was also one). It is easy to fix such conflicts without changing the actual texture map; just add a unique integer value constant to the identifier channel after reading the texture value to it:

identifier = texture(map coords)
identifier += constant(999)


A material that texture maps outlines

Now render the view window:


Customized outlines

At this point, rendered outlines appear jaggy without antialiasing. We can improve quality by using a suitable post processing configuration.

6. Switch to the Post Image Effects tab of the Select window. Select 'New/Line' from the popup menu to create a line drawing effect.

7. Select 'Default effects' from the effects list and open the property window. Drag&drop the new 'Line' effect from the 'Available Effects' list to the end of 'Active effects' hierarchy. Then go to the 'Scaling' tab of the property window. Set 'Output Scale X'= 0.5, 'Output Scale Y'= 0.5. In other words, image resolution will be halved after post processing. This also has the nice side effect of making the image antialiased. Close the property window.

8. Drag&drop 'Default effects' from the select window to the view, to make sure that it will be used in rendering. Switch to the Render settings tab of the select window. Open the property window of 'Black&white outline rendering'. 'Go to the 'Post proc' tab of the property window and make sure that 'Safety area' option is checked. Without safety area, Line effect will create gaps between render boxes. Then render the view. Rendering takes now longer but the quality is better. Outlines are now probably thicker, but you can adjust the line drawing width using the 'Min. Width' attribute of the Line effect (Post Image Effects tab, property window of the Line effect).

9. As a final step, let's define varying line width. We need a channel and a material for that purpose. First go to the Channels tab of the Select window and add a new float channel called 'linewidth'.

10. Then go to the Materials tab and create a new VSL material. The contents of the material is shown in the image below:


A material that defines line width

The material simply defines that line width is dependent on the distance: i.e. width increases towards the camera.

11. Go to the object hierarchy tab and select the root level. Then switch back to the material library and drag&drop 'linewidth' material to the view. Since the material was applied to the root, all objects will obey the customized line width definition.

12. Switch to the Post Image Effects tab and select the line effect. On the property window, set 'Width Channel' to the custom channel 'linewidth'.

13. Select the 'Default Effects' post image and decrease the output scaling factors to 0.25. This will improve antialiasing further so that the quality is good enough for 'final' rendering. Drag&drop the 'Default Effects' in the view window.

14. Output scaling to one quarter means that the program ray traces 16 times more pixels. To compensate the increased rendering work, select the render settings object 'Black&white outline rendering'. On the property window, go to the 'Ray Tracing' tab. Increase both 'Undersampling' values to 8 pixels. Also, make sure that 'Interpolate' is not set, it only slows the rendering without any result on the final output. Drag&Drop the render settings object 'Black&white outline rendering' in the view window. Then render the view. If necessary, adjust 'Min. Width' and 'Max. Width' values of the Line effect which define the thickness range.


Antialiased outlines